perm filename HHT.FAI[CMS,LCS]2 blob
sn#424700 filedate 1979-03-10 generic text, type T, neo UTF8
00100 ; LOAD THIS FILE AND SAVE AS "HHT.DMP"
00200 ; THEN EX CON11.FAI[CMS,LCS] TO CONVERT TO PDP-11 LOADER FORMAT
00300 ; FINAL FILE IS "LOAD11.HHT"
00400
00500 ; BIT RATE GEN CODES
00600 ; 0 = 0 10 = 9600
00700 ; 1 = 19.2K 11 = 4800
00800 ; 2 = 50 12 = 1800
00900 ; 3 = 75 13 = 1200
01000 ; 4 = 134.5 14 = 2400
01100 ; 5 = 200 15 = 300
01200 ; 6 = 600 16 = 150
01300 ; 7 = 2400 17 = 110
01400
01500 TITLE HHT
01600 .INSERT ASMBL.FAI[CMS,LCS]
01700
01800 CPL ← = 28 ;CHRS PER LINE
01900 NCHRS ← = 112 ;CHRS PER SCREEN
02000
02100 ; Zpage ram
02200 LOC 0
02300 COL: 0
02400 CUR: 0
02500 0
02600 WINDOW: 0
02700 0
02800
02900 TMP: 0
03000 0
03100 LINL: 0
03200 CHRL: 0
03300 BRT: 0
03400
03500 NWAIT: 0
03600 UPFLG: 0
03700 CURVIS: 0
03800 DIS: 0
03900 0
04000 SHIFT: 0
04100 WINK: 0
04200
04300 SHFT: 0 ;Keyboard shift flag.
04400 OFFL: 0 ;Off delay count low.
04500
04600 LOC 600
04700 REBUF0: BLOCK = 128 ;REFRESH BUFFER
04800 ; LOC 1000
04900 REBUF1: BLOCK = 128
05000 ; LOC 1200
05100 REBUF2: BLOCK = 128
05200 ; LOC 1400
05300 REBUF3: BLOCK = 128
05400 ; LOC 1600
05500 REBUF4: BLOCK = 128
05600 BLOCK = 1024
05700
05800 LOC 4000
05900 ABUF: 0 ;ASCII CHR BUF
00100 ; Reset
00200 LOC 174000 ;LOC 174000
00300 RSTA: LDAI 377 ;TURN OFF COLS
00400 STA COLREG
00500 CLD ;CLEAR DECIMAL MODE
00600 LDXI 177 ;STACK DEPTH
00700 TXS ;SETUP STACK
00800 LDAI 0 ;SET UP BRIGHTNESS
00900 STAZ BRT
01000
01100 ; SETUP AND CLEAR SCREEN
01200 ;CLEAR ABUF, SETUP CURSOR AND WINDOW
01300 SD ← 10 ;START OF ABUF
01400 ED ← 14 ;END OF ABUF
01500 JSR HOME ;SETUP CURSOR
01600 LDAI =16 ;NUMBER OF LINES IN MEM
01700 STAZ TMP
01800 CLRM: JSR LF ;<lf> THEN CLEAR LINE *16
01900 DECZ TMP
02000 BNE CLRM
02100 ; INIT I/O
02200 ;INIT RS232
02300 SIODEF ← 225 ;UART CONTROL WORD
02400 ACIAC ← 77776 ;UART CONTROL REG ADDRESS
02500 ACIAD ← 77777 ;UART DATA REG ADDRESS
02600 LDAI 3 ;RESET ACIA
02700 STA ACIAC
02800 LDAI SIODEF ;SETUP DEFAULT I/O CONTROL
02900 STA ACIAC
03000 ;INIT KB SCANER
03100 KBD ← 23776 ;KEYBOARD DATA REGISTER ADDRESS
03200 KBC ← 23777 ;KEYBOARD CONTROL REGISTER ADDRESS
03300 LDAI 2 ;KB DPY MODE SET
03400 STA KBC
03500 LDAI 60 ;KB CLK DIV
03600 STA KBC
03700
03800 LDAI 302 ;CLEAR KB INTERUPT
03900 STA KBC
04000
04100 LDAI 100 ;READ KB
04200 STA KBC
04300 LDXI 377
04400 STXZ OFFL ;Setup off delay.
04500 INX
04600 STXZ SHFT ;Reset shift flag.
04700
04800 CLI ;ENABLE INTERRUPTS
00100 ; REFRESH LOOP
00200 NCHRS ← =112 ;NUMBER OF CHRS ON SCREEN
00300 DPYSR ← 27777 ;DISPLAY SHIFT REGISTER ADDRESS
00400
00500 LDXI NCHRS-1
00600 RELOOP: LDAI 376
00700 STAZ COL ;SETUP COL BIT 1
00800 ; CY
00900 SLOOP0: LDAX REBUF0 ;PUT FIRST COL IN SHIFT 4
01000 STA DPYSR ;REGISTER STARTING WITH LAST CHR 4
01100 DEX ; 2
01200 BPL SLOOP0 ; _3_
01300 JSR NXCOL ;TURN ON COL AND WAIT 5+(13*112)=1461
01400
01500 SLOOP1: LDAX REBUF1 ;SECOND
01600 STA DPYSR
01700 DEX
01800 BPL SLOOP1
01900 JSR NXCOL
02000
02100 SLOOP2: LDAX REBUF2 ;THIRD
02200 STA DPYSR
02300 DEX
02400 BPL SLOOP2
02500 JSR NXCOL
02600
02700 SLOOP3: LDAX REBUF3 ;FORTH
02800 STA DPYSR
02900 DEX
03000 BPL SLOOP3
03100 JSR NXCOL
03200
03300 SLOOP4: LDAX REBUF4 ;FIFTH
03400 STA DPYSR
03500 DEX
03600 BPL SLOOP4
03700 JSR NXCOL
03800
03900 JMP RELOOP
00100 ; WAIT LOOP AND SETUP
00200 COLREG ← 33777 ;COL ENABLE REGISTER ADDRESS
00300 SPEED ← = 36 ;SPEED OF SHIFT RIGHT IN ms * 2
00400 ; TURN ON COL CY
00500 NXCOL: LDAZ COL ; 3
00600 STA COLREG ;TURN ON COL 4
00700 SEC ; 2
00800 ROLZ COL ;SHIFT FOR NEXT COL 5
00900
01000 ; WAIT(BRIGHTNESS) Tcy = 1488 = .9916 ms
01100 LDXZ BRT ; 3
01200 LDAX BTBL ; 4
01300 STAZ NWAIT ; 4
01400 WAIT1: DECZ NWAIT ; 5
01500 BNE WAIT1 ; 3
01600
01700 INCZ WINK ; 5
01800 BEQ BLINK ;TIME TO BLINK 2
01900 GOWAIT: LDAX OFFTBL ; 4
02000 STAZ NWAIT ;SETUP OFF WAIT 4
02100 LDXI NCHRS-1 ; 2
02200 ; TURN OFF COL
02300 LDAI 377 ; 2
02400 STA COLREG ;TURN OFF COL 4
02500 LDAZ UPFLG ;CK IF UPDATE FLAG SET 3
02600 BNE CKSHFT ; 2
02700
02800 ; WAIT(¬BRIGHTNESS)
02900 WAIT2: DECZ NWAIT ; 5
03000 BNE WAIT2 ; 3
03100
03200 RTS ; 6
03300 ; BRIGHTNESS TABLES
03400 BTBL: =80 ↔ =200
03500 OFFTBL: =120 ↔ 1
03600 ; BLINK CURSOR
03700 BLINK: DECZ OFFL ;Off delay.
03800 BNE SWTCH
03900 LDAI 377
04000 STA COLREG ;Turn off display.
04100 OFF: BITZ OFFL ;Wait until KB or RS232.
04200 BPL OFF
04300
04400 SWTCH: JSR SHOCUR ;XOR CURSOR INTO REBUF
04500 JMP GOWAIT
04600 ; CHECK FOR RIGHT SHIFT
04700 CKSHFT: BPL UPDATE ;CK RIGHT SHIFT FLAG
04800 DECZ SHIFT ;SEE IF TIME TO SHIFT
04900 BNE WAIT2 ;CK UPDATE?
05000 LDAI SPEED
05100 STAZ SHIFT
05200 SEI ;MASK OUT INTERRUPTS
05300 LDYZ WINDOW
05400 INY
05500 TYA
05600 ANDI 77
05700 CMPI 45 ;CHECK IF AT LEFT EDGE
05800 BCS EDGE
05900 STYZ WINDOW
06000 JSR CKVIS ;SETUP Y INDEX AND DISTANCE
06100 CLI ;ENABLE INTERUPTS
06200 JMP UPDPY
06300
06400 EDGE: LDAZ UPFLG
06500 ANDI 177 ;TURN OFF RIGHT SHIFT FLAG
06600 STAZ UPFLG
06700 CLI ;ENABLE INTERRUPTS
06800 BEQ WAIT2 ;FALL THROUGH TO UPDATE
00100 ; UPDATE SCREEN
00200 UPDATE: LDAI 0 ;RESET UDATE FLAG
00300 STAZ UPFLG
00400 UPDPY: LDAZ WINDOW ;COPY WINDOW INTO TEMP
00500 STAZ TMP
00600 LDAZ WINDOW+1
00700 STAZ TMP+1
00800 LDAI 4 ;NUMBER OF LINES PER SCREEN
00900 STAZ LINL
01000 LDYI 0
01100
01200 LLOOP: LDAI CPL ;28 CHRS TO GO
01300 STAZ CHRL
01400
01500 ULOOP: LDXI 0
01600 LDAIX TMP ;WRITE CHRGEN BITS INTO REBUF
01700 JSR WCHR
01800 INY
01900 INCZ TMP
02000 BNE CKCHRL
02100 INCZ TMP+1
02200 LDAZ TMP+1
02300 CMPI ED
02400 BNE CKCHRL
02500 LDAI SD
02600 STAZ TMP+1
02700
02800 CKCHRL: DECZ CHRL
02900 BNE ULOOP ;MORE CHRS LEFT ON LINE
03000
03100 LDAZ TMP
03200 CLC
03300 ADCI 44 ;100-CPL = NEXT LINE
03400 STAZ TMP
03500 BCC NOOF
03600 INCZ TMP+1
03700 LDAZ TMP+1
03800 CMPI ED
03900 BNE NOOF
04000 LDAI SD
04100 STAZ TMP+1
04200
04300 NOOF: DECZ LINL
04400 BNE LLOOP ;DO NEXT LINE
04500
04600 JSR SHOCUR ;SHOW CURSOR IF ON SCREEN
04700 LDXI NCHRS-1 ;SETUP X
04800 RTS
00100 ; KB INTERRUPT ROUTINE
00200 KBINT: PHA ;SAVE REGS
00300 TXA
00400 PHA
00500
00600 LDX KBD ;GET CHR FROM KB
00700
00800 LDAI 302 ;CLEAR KB INTERUPT
00900 STA KBC
01000
01100 CPXI 300 ;Shift key index.
01200 BNE SHFTCK
01300 STXZ SHFT ;Set shift flag.
01400 BEQ KBRTRN ;Jump.
01500 SHFTCK: BITZ SHFT ;Ck if last key = shift
01600 BPL CLRIT
01700 TXA
01800 ANDI 277 ;And out 100 bit.
01900 TAX
02000 LDAI 0 ;Reset shift flag.
02100 STAZ SHFT
02200 CLRIT: CLI ;CLEAR INTERUPT MASK
02300
02400 OWAIT: LDA ACIAC
02500 ANDI 2 ;CHECK IF FULL
02600 BEQ OWAIT
02700 LDAX CHRTBL ;CONVERT KB TO ASCCI
02800 STA ACIAD ;OUTPUT IT
02900
03000 KBRTRN: LDAI 377
03100 STAZ OFFL ;Reset off delay count.
03200
03300 PLA ;RESTORE REGS
03400 TAX
03500 PLA
03600 RTI ;RETURN
03700 ;ERASE CURSOR
03800 CKERA: LDYZ CURVIS
03900 BMI NOS ;CK IF ON SCREEN
04000 LDXI 0
04100 LDAIX CUR
04200 ; GEN CHR
04300 WCHR: TAX ;X ← ASCII CHR
04400 LDAX CGEN0 ;FILL REBUF COLS 0-4
04500 STAY REBUF0
04600 LDAX CGEN1
04700 STAY REBUF1
04800 LDAX CGEN2
04900 STAY REBUF2
05000 LDAX CGEN3
05100 STAY REBUF3
05200 LDAX CGEN4
05300 STAY REBUF4
05400 NOS: RTS
05500 ; <bspace>
05600 BS: JSR CKERA ;ERASE OLD CURSOR IF ON SCREEN
05700 LDAZ CUR ;DECREMENT CURSOR
05800 BNE NOBACK
05900 DECZ CUR+1
06000 LDAZ CUR+1
06100 CMPI SD-1 ;CK IF BEFORE BEGINING
06200 BNE NOBACK
06300 LDAI ED-1 ;WRAP AROUND
06400 STAZ CUR+1
06500 NOBACK: DECZ CUR
06600 JMP CKCUR ;SHOW CURSOR IF ON SCREEN
06700 ; CURSOR OFF LINE
06800 OFFLIN: DECZ CUR ;FIX CUR FOR <cr>
06900 JSR CR ;<cr>
07000 JMP RLF ;<lf>, CK SCROLL AND UPDATE
00100 ; RS232 INTERRUPT ROUTINE
00200 RSINT: PHA ;SAVE REGS
00300 TXA
00400 PHA
00500 TYA
00600 PHA
00700
00800 LDA ACIAD ;GET CHR FROM ACIA
00900 ANDI 177 ;7 BITS
01000 BEQ RSRTRN ;Check for nulls.
01100
01200 CMPI 10 ;<Backspace>.
01300 BEQ BS
01400 CMPI 30 ;Control codes.
01500 BCC SCNTRL
01600
01700 PCHR: LDXI 0
01800 STAIX CUR ;STORE IN ABUF
01900 LDYZ CURVIS ;CK IF IN WINDOW
02000 BMI INCUR
02100 JSR WCHR ;WRITE CHR IN REBUF
02200
02300 INCUR: INCZ CUR ;INCREMENT CURSOR
02400 LDAZ CUR
02500 ANDI 77
02600 BEQ OFFLIN ;BRANCH IF OFF END OF LINE
02700
02800 CKCUR: JSR CKVIS ;SHOW CURSOR IF ON SCREEN
02900
03000 JSR SHOCUR ;XOR CURSOR INTO REBUF
03100
03200 RSRTRN: LDAI 377
03300 STAZ OFFL ;Reset off delay count.
03400
03500 PLA ;RESTORE REGS
03600 TAY
03700 PLA
03800 TAX
03900 PLA
04000 RTI ;RETURN
00100 ; FOLLOW CURSOR
00200 FOLLOW: LDXZ WINDOW
00300 LDYZ WINDOW+1
00400 LDAZ CUR
00500 ANDI 300 ;SET CURSOR AT BOTTOM RIGHT OF WINDOW
00600 SEC
00700 SBCI 300
00800 STAZ WINDOW
00900 LDAZ CUR+1
01000 SBCI 0
01100 CMPI SD-1
01200 BNE NOTB4
01300 LDAI ED-1
01400 NOTB4: STAZ WINDOW+1
01500
01600 LDAZ CUR ;SET CURSOR AT RIGHT
01700 ANDI 77
01800 CMPI CPL
01900 BCC OK
02000 SBCI CPL-1
02100 ORAZ WINDOW
02200 STAZ WINDOW
02300
02400 OK: CPXZ WINDOW ;UPDATE SCREEN IF DIFFERENT
02500 BNE SETFLG
02600 CPYZ WINDOW+1
02700 BNE SETFLG
02800 BEQ RSRTRN
02900
03000 ;Oldest text.
03100 OLDEST: LDAZ CUR
03200 ANDI 300
03300 CLC
03400 ADCI 100 ;Next line.
03500 STAZ WINDOW
03600 LDAZ CUR+1
03700 ADCI 0
03800 CMPI ED
03900 BNE NOPASS
04000 LDAI SD
04100 NOPASS: STAZ WINDOW+1
04200 BNE SETFLG ;JUMP.
00100 ; RS232 CONTROL
00200 SCNTRL: CMPI 26 ;CUR ← RIGHT BOTTOM
00300 BEQ FOLLOW
00400 CMPI 12 ;<lf>
00500 BEQ RLF
00600 CMPI 15 ;<cr>
00700 BEQ RCR
00800 CMPI 13 ;SCROLL UP
00900 BEQ SCRLU
01000 CMPI 14 ;SCROLL DOWN
01100 BEQ SCRLD
01200 CMPI 22 ;TOGGLE BRIGHTNESS
01300 BEQ BRIGHT
01400 CMPI 20 ;RIGHT
01500 BEQ RIGHT
01600 CMPI 21 ;SET AT LEFT
01700 BEQ LEFT
01800 CMPI 7 ;ERROR
01900 BEQ JRTRN
02000 CMPI 27 ;Oldest.
02100 BEQ OLDEST
02200 JMP PCHR ;PRINT IT ANYWAY
02300 ; <lf>
02400 RLF: JSR LF ;<lf>
02500 JMP SETFLG ;UPDATE SCREEN
02600 ; <cr>
02700 RCR: JSR CKERA ;ERASE OLD CURSOR
02800 JSR CR
02900 JMP CKCUR ;SHOW CURSOR IF ON SCREEN
03000 ; SCROLL DOWN
03100 SCRLD: LDAZ WINDOW
03200 CLC
03300 ADCI 100 ;FOR 64 CHRS
03400 STAZ WINDOW
03500 BCC SETFLG
03600 INCZ WINDOW+1
03700 LDAZ WINDOW+1
03800 CMPI ED
03900 BNE SETFLG
04000 LDAI SD
04100 STAZ WINDOW+1
04200 SETFLG: JSR CKVIS
04300 INCZ UPFLG ;UPDATE SCREEN
04400 JRTRN: JMP RSRTRN ;SET UPDATE FLAG
00100 ; SCROLL UP
00200 SCRLU: LDAZ WINDOW
00300 SEC
00400 SBCI 100 ;64 CHRS PER LINE
00500 STAZ WINDOW
00600 BCS SETFLG
00700 DECZ WINDOW+1
00800 LDAZ WINDOW+1
00900 CMPI SD-1
01000 BNE SETFLG
01100 LDAI ED-1
01200 STAZ WINDOW+1
01300 JMP SETFLG
01400 ; BRIGHTNESS
01500 BRIGHT: LDAZ BRT
01600 ANDI 1
01700 EORI 1 ;TOGGLE
01800 STAZ BRT
01900 JMP RSRTRN
02000 ; SET WINDOW AT LEFT OF PAGE
02100 LEFT: LDAZ WINDOW
02200 ANDI 300
02300 STAZ WINDOW
02400 LDAI 1 ;1 FOR NO RIGHT SHIFT AND UPDATE SCREEN
02500 STAZ UPFLG
02600 JMP SETFLG
02700 ; WINDOW RIGHT
02800 RIGHT: LDAZ UPFLG
02900 EORI 200 ;TOGGLE RIGHT SHIFT BIT
03000 STAZ UPFLG
03100 LDAI SPEED
03200 STAZ SHIFT
03300 JMP RSRTRN
00100 ; CK IF IN WINDOW
00200 CKVIS: LDYI 377 ;SET NO SHOW
00300 LDAZ CUR ;GET DISTANCE
00400 SEC
00500 SBCZ WINDOW
00600 STAZ DIS
00700 LDAZ CUR+1
00800 SBCZ WINDOW+1
00900 BCS CKEQ
01000 ADCI 4 ;IF NEG, ADD BUF LEN
01100 CKEQ: STAZ DIS+1
01200 BNE NOTVIS ;NO SHOW IF ≥ 256
01300 LDAZ DIS
01400 ANDI 77
01500 CMPI CPL ;NO SHOW IF ≥ 28
01600 BCS NOTVIS
01700 STAZ CURVIS
01800 LDAZ DIS ;GET REBUF INDEX
01900 ANDI 300
02000 ROLA
02100 ROLA
02200 ROLA
02300 TAX
02400 LDAX ROWTBL ;NLINES * 28
02500 ADCZ CURVIS
02600 TAY
02700 NOTVIS: STYZ CURVIS
02800 RTS
02900
03000 ROWTBL: 0
03100 CPL
03200 CPL*2
03300 CPL*3
03400
03500 SHOCUR: LDYZ CURVIS
03600 BMI NOSHO
03700 LDAY REBUF0 ;OR CURSOR INTO CHR
03800 EORI 100
03900 STAY REBUF0
04000 LDAY REBUF1
04100 EORI 100
04200 STAY REBUF1
04300 LDAY REBUF2
04400 EORI 100
04500 STAY REBUF2
04600 LDAY REBUF3
04700 EORI 100
04800 STAY REBUF3
04900 LDAY REBUF4
05000 EORI 100
05100 STAY REBUF4
05200 NOSHO: RTS
00100 ; HOME CURSOR.
00200 HOME: LDAI 0 ;CURSOR ← WINDOW ← TOP
00300 STAZ CUR
00400 STAZ WINDOW
00500 STAZ CURVIS
00600 LDAI SD
00700 STAZ CUR+1
00800 STAZ WINDOW+1
00900 STAZ UPFLG ;SET UPDATE FLAG
01000 RTS
01100 ; <lf> SUBROUTINE
01200 LF: LDAZ CUR
01300 CLC
01400 ADCI 100 ;CUR ← CUR + 64
01500 STAZ CUR
01600 BCC CTEOL
01700 INCZ CUR+1
01800 LDAZ CUR+1
01900 CMPI ED
02000 BNE CTEOL
02100 LDAI SD ;WRAP AROUND
02200 STAZ CUR+1
02300 ; CLEAR TO END OF LINE.
02400 CTEOL: LDAZ CUR
02500 ANDI 77
02600 EORI 77
02700 TAY ;Y ← # CHRS LEFT ON LINE
02800 LDAI 40 ;<space>
02900 CLRL: STAIY CUR ;FILL CURSOR TO CURSOR + CPL
03000 DEY ;WITH SPACES
03100 BPL CLRL
03200 RTS
03300 ; <cr> SUBROUTINE
03400 CR: LDAZ CUR ;CUR ← CUR ∧ ¬77
03500 ANDI 300
03600 STAZ CUR
03700 RTS
00100 ; ASCII TABLE BITS 7 6 5 4 3 2 1 0
00200 ; LOC 176000 CNTL SHFT S2 S1 S0 RL2 RL1 RL0
00300 LOC 176000
00400 CHRTBL:
00500 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ;CONTROL
00600 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
00700 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
00800 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
00900 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
01000 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
01100 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
01200 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
01300
01400 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ;CNTL SHFT
01500 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
01600 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
01700 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
01800 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
01900 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
02000 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
02100 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
02200
02300 7 ↔ "?" ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ "'" ↔ 13 ;SHIFT
02400 "+" ↔ "(" ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 42 ↔ 26
02500 "-" ↔ ")" ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ "@" ↔ 27
02600 "*" ↔ "[" ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ "$" ↔ " "
02700 "/" ↔ "]" ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ ":" ↔ 22
02800 "=" ↔ "%" ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ ";" ↔ 12
02900 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
03000 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
03100
03200 7 ↔ "#" ↔ "A" ↔ "G" ↔ "M" ↔ "S" ↔ "Y" ↔ 14
03300 "1" ↔ "6" ↔ "B" ↔ "H" ↔ "N" ↔ "T" ↔ "Z" ↔ 20
03400 "2" ↔ "7" ↔ "C" ↔ "I" ↔ "O" ↔ "U" ↔ "-" ↔ 21
03500 "3" ↔ "8" ↔ "D" ↔ "J" ↔ "P" ↔ "V" ↔ "!" ↔ " "
03600 "4" ↔ "9" ↔ "E" ↔ "K" ↔ "Q" ↔ "W" ↔ "." ↔ 10
03700 "5" ↔ "0" ↔ "F" ↔ "L" ↔ "R" ↔ "X" ↔ "," ↔ 15
03800 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
03900 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
00100 ;CHR GEN ⊗ = GRAPHICS
00200 ; 0 1 2 3 4 5 6 7
00300 ; 0/ ⊗ ⊗ ⊗ ⊗ ⊗ ⊗
00400 ; 10/ ⊗
00500 ; 20/
00600 ; 30/ ⊗ ⊗ ⊗ ⊗ ⊗ ⊗ ⊗ ⊗
00700 ; 40/ ! " # $ % & '
00800 ; 50/ ( ) * + , - . /
00900 ; 60/ 0 1 2 3 4 5 6 7
01000 ; 70/ 8 9 : ; < = > ?
01100 ;100/ @ A B C D E F G
01200 ;110/ H I J K L M N O
01300 ;120/ P Q R S T U V W
01400 ;130/ X Y Z [ \ ] ↑ ←
01500 ;140/ a b c d e f g
01600 ;150/ h i j k l m n o
01700 ;160/ p q r s t u v w
01800 ;170/ x y z { | }
01900
02000 LOC 176400 ;LOC 176400
02100
02200 CGEN0: 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 010 ↔ 000 ↔ 000
02300 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000
02400 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 000
02500 010 ↔ 000 ↔ 010 ↔ 010 ↔ 010 ↔ 000 ↔ 010 ↔ 010
02600 000 ↔ 157 ↔ 003 ↔ 024 ↔ 056 ↔ 043 ↔ 060 ↔ 003
02700 034 ↔ 101 ↔ 044 ↔ 010 ↔ 100 ↔ 010 ↔ 140 ↔ 040
02800 076 ↔ 102 ↔ 102 ↔ 042 ↔ 010 ↔ 057 ↔ 060 ↔ 101
02900 066 ↔ 106 ↔ 146 ↔ 114 ↔ 010 ↔ 024 ↔ 101 ↔ 002
03000 164 ↔ 176 ↔ 177 ↔ 076 ↔ 177 ↔ 177 ↔ 177 ↔ 076
03100 177 ↔ 101 ↔ 040 ↔ 177 ↔ 177 ↔ 177 ↔ 177 ↔ 076
03200 177 ↔ 076 ↔ 177 ↔ 046 ↔ 001 ↔ 077 ↔ 037 ↔ 177
03300 143 ↔ 003 ↔ 141 ↔ 177 ↔ 002 ↔ 101 ↔ 004 ↔ 010
03400 000 ↔ 044 ↔ 177 ↔ 070 ↔ 060 ↔ 070 ↔ 010 ↔ 046
03500 177 ↔ 172 ↔ 040 ↔ 177 ↔ 101 ↔ 174 ↔ 174 ↔ 070
03600 177 ↔ 006 ↔ 174 ↔ 110 ↔ 004 ↔ 074 ↔ 034 ↔ 074
03700 104 ↔ 047 ↔ 104 ↔ 010 ↔ 177 ↔ 000 ↔ 101 ↔ 000
03800
03900 CGEN1: 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 010 ↔ 000 ↔ 000
04000 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000
04100 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 000
04200 010 ↔ 000 ↔ 010 ↔ 010 ↔ 010 ↔ 000 ↔ 010 ↔ 010
04300 000 ↔ 157 ↔ 000 ↔ 177 ↔ 111 ↔ 023 ↔ 116 ↔ 000
04400 042 ↔ 042 ↔ 030 ↔ 010 ↔ 040 ↔ 010 ↔ 140 ↔ 020
04500 121 ↔ 177 ↔ 141 ↔ 101 ↔ 014 ↔ 111 ↔ 110 ↔ 041
04600 111 ↔ 051 ↔ 146 ↔ 054 ↔ 024 ↔ 024 ↔ 042 ↔ 001
04700 124 ↔ 011 ↔ 111 ↔ 101 ↔ 101 ↔ 111 ↔ 011 ↔ 101
04800 010 ↔ 177 ↔ 100 ↔ 010 ↔ 100 ↔ 002 ↔ 004 ↔ 101
04900 011 ↔ 101 ↔ 011 ↔ 111 ↔ 001 ↔ 100 ↔ 040 ↔ 040
05000 024 ↔ 004 ↔ 121 ↔ 101 ↔ 004 ↔ 101 ↔ 002 ↔ 034
05100 000 ↔ 124 ↔ 110 ↔ 104 ↔ 110 ↔ 124 ↔ 176 ↔ 111
05200 010 ↔ 000 ↔ 100 ↔ 040 ↔ 177 ↔ 004 ↔ 010 ↔ 104
05300 006 ↔ 011 ↔ 010 ↔ 124 ↔ 004 ↔ 100 ↔ 040 ↔ 100
05400 050 ↔ 110 ↔ 144 ↔ 066 ↔ 000 ↔ 000 ↔ 101 ↔ 000
00100 CGEN2: 000 ↔ 017 ↔ 177 ↔ 170 ↔ 010 ↔ 010 ↔ 010 ↔ 000
00200 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 170
00300 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 052 ↔ 000 ↔ 000
00400 170 ↔ 017 ↔ 017 ↔ 170 ↔ 017 ↔ 177 ↔ 177 ↔ 177
00500 000 ↔ 000 ↔ 003 ↔ 024 ↔ 177 ↔ 010 ↔ 121 ↔ 000
00600 101 ↔ 034 ↔ 030 ↔ 076 ↔ 000 ↔ 010 ↔ 000 ↔ 010
00700 111 ↔ 100 ↔ 121 ↔ 101 ↔ 012 ↔ 111 ↔ 114 ↔ 021
00800 111 ↔ 031 ↔ 000 ↔ 000 ↔ 042 ↔ 024 ↔ 024 ↔ 121
00900 164 ↔ 011 ↔ 111 ↔ 101 ↔ 101 ↔ 111 ↔ 011 ↔ 101
01000 010 ↔ 101 ↔ 100 ↔ 024 ↔ 100 ↔ 004 ↔ 010 ↔ 101
01100 011 ↔ 121 ↔ 031 ↔ 111 ↔ 177 ↔ 100 ↔ 100 ↔ 020
01200 010 ↔ 170 ↔ 111 ↔ 101 ↔ 010 ↔ 177 ↔ 177 ↔ 052
01300 000 ↔ 124 ↔ 110 ↔ 104 ↔ 110 ↔ 124 ↔ 011 ↔ 111
01400 010 ↔ 000 ↔ 100 ↔ 020 ↔ 100 ↔ 170 ↔ 004 ↔ 104
01500 011 ↔ 011 ↔ 004 ↔ 124 ↔ 077 ↔ 100 ↔ 100 ↔ 074
01600 020 ↔ 110 ↔ 124 ↔ 101 ↔ 000 ↔ 000 ↔ 076 ↔ 000
01700
01800 CGEN3: 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 010 ↔ 000
01900 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010
02000 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 000
02100 000 ↔ 010 ↔ 000 ↔ 010 ↔ 010 ↔ 010 ↔ 000 ↔ 010
02200 000 ↔ 000 ↔ 000 ↔ 177 ↔ 111 ↔ 144 ↔ 046 ↔ 000
02300 000 ↔ 000 ↔ 044 ↔ 010 ↔ 000 ↔ 010 ↔ 000 ↔ 004
02400 105 ↔ 000 ↔ 111 ↔ 111 ↔ 177 ↔ 111 ↔ 112 ↔ 011
02500 111 ↔ 011 ↔ 000 ↔ 000 ↔ 101 ↔ 024 ↔ 010 ↔ 011
02600 104 ↔ 011 ↔ 111 ↔ 101 ↔ 101 ↔ 111 ↔ 011 ↔ 111
02700 010 ↔ 000 ↔ 100 ↔ 042 ↔ 100 ↔ 002 ↔ 020 ↔ 101
02800 011 ↔ 041 ↔ 051 ↔ 111 ↔ 001 ↔ 100 ↔ 040 ↔ 040
02900 024 ↔ 004 ↔ 105 ↔ 000 ↔ 020 ↔ 000 ↔ 002 ↔ 010
03000 000 ↔ 124 ↔ 110 ↔ 104 ↔ 110 ↔ 124 ↔ 011 ↔ 106
03100 010 ↔ 000 ↔ 075 ↔ 050 ↔ 000 ↔ 004 ↔ 004 ↔ 104
03200 011 ↔ 006 ↔ 004 ↔ 124 ↔ 104 ↔ 100 ↔ 040 ↔ 100
03300 050 ↔ 104 ↔ 114 ↔ 101 ↔ 000 ↔ 000 ↔ 010 ↔ 000
03400
03500 CGEN4: 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 010 ↔ 000
03600 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010
03700 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 000
03800 000 ↔ 010 ↔ 000 ↔ 010 ↔ 010 ↔ 010 ↔ 000 ↔ 010
03900 000 ↔ 000 ↔ 000 ↔ 024 ↔ 062 ↔ 142 ↔ 100 ↔ 000
04000 000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 010 ↔ 000 ↔ 002
04100 076 ↔ 000 ↔ 106 ↔ 066 ↔ 010 ↔ 061 ↔ 061 ↔ 007
04200 066 ↔ 006 ↔ 000 ↔ 000 ↔ 000 ↔ 024 ↔ 000 ↔ 006
04300 174 ↔ 176 ↔ 066 ↔ 042 ↔ 076 ↔ 101 ↔ 001 ↔ 072
04400 177 ↔ 000 ↔ 077 ↔ 101 ↔ 100 ↔ 177 ↔ 177 ↔ 076
04500 006 ↔ 136 ↔ 106 ↔ 062 ↔ 001 ↔ 077 ↔ 037 ↔ 177
04600 143 ↔ 003 ↔ 103 ↔ 000 ↔ 040 ↔ 000 ↔ 004 ↔ 010
04700 000 ↔ 170 ↔ 060 ↔ 104 ↔ 177 ↔ 130 ↔ 002 ↔ 077
04800 160 ↔ 000 ↔ 000 ↔ 104 ↔ 000 ↔ 170 ↔ 170 ↔ 070
04900 006 ↔ 177 ↔ 010 ↔ 044 ↔ 104 ↔ 074 ↔ 034 ↔ 074
05000 104 ↔ 077 ↔ 104 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000
05100
05200 ; INTER VECTS
05300 LOC 177772 ;LOC 177772
05400 NMIV: KBINT∧377 ;NMIV: ABSO KBINT
05500 371
05600 RSTV: 0 ;RSTV: ABSO RSTA
05700 370
05800 IRQV: RSINT∧377 ;IRQV: ABSO RSINT
05900 371
06000 END